home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / yacas_alg / yacas_morphos / share / yacas / include / lispuserfunc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-03-13  |  2.2 KB  |  75 lines

  1.  
  2.  
  3. #ifndef __lispuserfunc_h__
  4. #define __lispuserfunc_h__
  5.  
  6. #include "yacasbase.h"
  7. #include "lispobject.h"
  8. #include "lispenvironment.h"
  9. #include "lisphash.h"
  10. #include "grower.h"
  11. #include "evalfunc.h"
  12.  
  13. // class LispUserFunc : base user function api: should be able
  14. // to evaluate with some arguments. It's a pure abstract class that
  15. // should be obtained through an associated hash...
  16. class LispUserFunction : public EvalFuncBase
  17. {
  18. public:
  19.     LispUserFunction() : iFenced(LispTrue),iTraced(LispFalse) {};
  20.     virtual ~LispUserFunction();
  21.     virtual void Evaluate(LispPtr& aResult,LispEnvironment& aEnvironment,
  22.                   LispPtr& aArguments)=0;
  23.     virtual void HoldArgument(LispStringPtr aVariable) = 0;
  24.     virtual void DeclareRule(LispInt aPrecedence, LispPtr& aPredicate,
  25.                              LispPtr& aBody) = 0;
  26.     virtual void DeclareRule(LispInt aPrecedence, LispPtr& aBody) = 0;
  27.     virtual void DeclarePattern(LispInt aPrecedence, LispPtr& aPredicate,
  28.                              LispPtr& aBody) = 0;
  29.     virtual LispPtr& ArgList() = 0;
  30.  
  31. public: //unfencing
  32.     inline void UnFence() {iFenced = LispFalse;};
  33.     inline LispBoolean Fenced() {return iFenced;};
  34. public: //tracing
  35.     inline void Trace() {iTraced = LispTrue;};
  36.     inline void UnTrace() {iTraced = LispFalse;};
  37.     inline LispBoolean Traced() {return iTraced;};
  38. private:
  39.     LispBoolean iFenced;
  40.     LispBoolean iTraced;
  41. };
  42.  
  43. // User function with a specific arity (number of arguments)
  44. class LispArityUserFunction : public LispUserFunction
  45. {
  46. public:
  47.     virtual LispInt Arity() const = 0;
  48. };
  49.  
  50. class LispDefFile;
  51. class LispMultiUserFunction : public YacasBase
  52. {
  53. public:
  54.     LispMultiUserFunction() : iFileToOpen(NULL) {};
  55.         
  56.     LispUserFunction* UserFunc(LispInt aArity);
  57.     virtual ~LispMultiUserFunction();
  58.     virtual void HoldArgument(LispStringPtr aVariable);
  59.     virtual void DefineRuleBase(LispArityUserFunction* aNewFunction);
  60.     virtual void DeleteBase(LispInt aArity);
  61. private:
  62.     CDeletingArrayGrower<LispArityUserFunction*> iFunctions;
  63. public:
  64.     LispDefFile* iFileToOpen; // file to read for definition of this function
  65. };
  66.  
  67.  
  68. class LispUserFunctions : public LispAssociatedHash<LispMultiUserFunction>
  69. {
  70. };
  71.  
  72.  
  73. #endif
  74.  
  75.